Дисциплина "Операционные системы".

Задания для контрольной работы заочной формы обучения.

В качестве контрольных заданий предлагается выполнить разработку приложений,
(1) использующих системные вызовы (обращения к ядру ОС) и
(2) автоматизирующие рутинную работу администратора при помощи bash.

Работы должны выполняться (и будут проверяться) в ОС Linux.

Всего предлагается 5 вариантов заданий. Выбор варианта осуществляется следующим образом:
Сумма кодов символов, являющихся первыми буквами имени и фамилии студента
в кодировке cp-1251 (win1251) обозначим через S. Тогда номер варианта
опрелится по формуле 
  N = S % 5 + 1.
Например, Иван Петров - коды букв И и П соответвенно 200 и 207.
Номер варианта - 407 % 5 + 1 , равен 3.

1. Приложение, используещее системные вызовы.

Интерфейсы системных вызовов хорошо и подробно описаны в книге Т.Чана [1].

Необходимо используя функции системных вызовов
opendir, readdir, open, read, lseek, fcntl
написать программу, находящую в указаннам каталоге и всех
вложенных каталогах файлы с идентичным содержанием (дубли)
и заменить их ссылками на первую встретившуюся копию 
этого файла.

  Для обхода дерева каталога использовать вызовы

stat, opendir и readdir.

Функция stat возвращает заполненную структуру для очредного файла:

struct stat {
               dev_t     st_dev;         /* ID of device containing file */
               ino_t     st_ino;         /* inode number */
               mode_t    st_mode;        /* protection */
               nlink_t   st_nlink;       /* number of hard links */
               uid_t     st_uid;         /* user ID of owner */
               gid_t     st_gid;         /* group ID of owner */
               dev_t     st_rdev;        /* device ID (if special file) */
               off_t     st_size;        /* total size, in bytes */
               blksize_t st_blksize;     /* blocksize for filesystem I/O */
               blkcnt_t  st_blocks;      /* number of 512B blocks allocated */
  //............
  //
           };


По значению поля st_mode структуры stat определять тип файла
(Если это каталог, обрабатываем его рекурсивно), для 
регулярного файла проверяем
по значению st_size возможную копию и, в случае
равенства размеров, проводим побайтовое сравнение файлов.
Используем open и read. На время сравнения блокируем возможность
изменения файлов системным вызовом fcntl.


Варианты работы:

Вариант 1. Использовать для замены жесткие ссылки.
Вариант 2. Использовать для звмены символические ссылки.
Вариант 3. Удалять дубли.
Вариант 4. Заменять дубль на текстовой файл с указанием местоположения оригинала.
Вариант 5. Просто вывести список найденных дублей в файл.



2. Автоматизация администрирования при помощи скрипта на шелле.

  При администрировании в операционных системах часто возникает необходимость 
выполнения большого объема рутинных действий.

Среди множества файлов, находящихся в домашних каталогах пользователей,
расположенных с штатном каталоге /home/ выполнить следующие дествия
над регуляроными файлами, не являющие скрытыми файлами (т.е. имя файла
не начинается с символа '.'), по вариантам:

Вариант 1:  Найти и удалить файлы с образами CD-дисков (скорее всего с суффиксом .iso)
и видеофайлами (скорее всего с суффиксами .avi, .mkv, .flv и т.д.).
Список удаленных файлов в виде текстового файла под именем DELETED.txt оставить
 в каталоге пользователя.

Вариант 2: Составить список "устаревших" файлов, к которым не было обращения в
течении последних 2-х лет (считать от момента проверки).
Направить список этих файлов их владельцам по почте.

Вариант 3: Найти каталоги пользователей, в которых не производилось никаких изменений
со времени определенной даты и заблокировать учетные записи этих пользователей

Вариант 4: Найти каталоги пользователей, в которых суммарный размер хранимых файлов
превышает заданный порог (например 2Гб) и послать этим пользователям
уведомление о возможной блокировке их учетных записей

Вариант 5: Найти каталоги пользователей, в которых не производилось никаких изменений
с момента создания учетной записи и если с этого момента прошло более года, то
удалить учетные записи этих пользователей и их домашние каталоги. Список удаленных
пользователей послать по почте пользователю root.


Замечания:
Для выполнения необходимо найти утилиты чтения метаданных файла для
определения его содержимого. Изучить способы работы с датами и определения
интервала времени между двуми датами. Ознакомиться с утилитами работы почты.
Синтаксис bash и примеры написания скриптов можно найти в книге [2].


   ЛИТЕРАТУРА

[1] Теренс Чан, Системное программирование на C++ для UNIX, BHV, Киев, 1997 г.
    электронная копия прилагается.
[2] Мендель Купер, Искусство программирование на языке сценариев командной 
    оболочки, пер. с англ. А.Киселева, 2003 г., электронная копия прилагается.


